package Pack;

import java.util.*;
/**
 * Classe Evento que caracteria um evento que pode ser adicionado pelo  usuario
 * @author Tiaraju
 * @version 1.0
 *
 */
public class Evento {
	
	private String nome,data,horario,duracao,descricao,anotacao,tipo;
	private List<Contato> usuariosCadastrados = new ArrayList<Contato>();
	private Scanner sc = new Scanner(System.in);
	private final String STRING_VAZIA="";
	
	// Construtores de eventos
	/**
	 * Cria um objeto do tipo Evento  
	 * @param nome Nome do evento
	 * @param data Data do evento
	 * @param horario Horario do evento
	 * @param duracao Duracao do evento
	 */
	public Evento(String nome, String data, String horario, String duracao)throws Exception{
		if (nome == null || data == null || horario==null || duracao == null){
			throw new Exception("parametros nulos");
		}
		this.data=data;
		this.duracao=duracao;
		this.horario=horario;
		this.nome=nome;
	}
	/**
	 * Cria um objeto do tipo Evento com um tipo especifico
	 * @param nome Nome do evento
	 * @param data Data do evento
	 * @param horario Horario do evento
	 * @param duracao Duracao do evento 
	 * @param tipo Tipo do evento
	 */
	public Evento(String nome, String data, String horario, String duracao, String tipo)throws Exception{
		this(nome,data,horario,duracao);
		if( tipo == null){
			throw new Exception("tipo invalido");
		}
		this.tipo=tipo;
	}
	/**
	 * Adiciona a uma string a descricao do evento
	 */
	public void CriaDescricao(){
		//a variavel sc vai ser usada no main, na interface
		this.sc = new Scanner(System.in);
		descricao+=sc.nextLine();		
	}
	/**
	 * Adiciona um contato a um determinado evento 
	 * @param contato Contato presente na agenda a ser adicionado ao evento
	 */
	public void AdicionaUsuarioaEvento(Contato contato){
		//verificar pelo nome ( ver forma de armazenamento)
		usuariosCadastrados.add(contato);
		
	}
	/**
	 * Adiciona uma anotacao opcional ao evento
	 */
	public void CriaAnotacao(){
		this.sc= new Scanner(System.in);
		anotacao+=sc.nextLine();		
	}
	/**
	 * Recupera o nome do evento
	 * @return retorna o nome do evento
	 */
	public String getNome() {
		return nome;
	}
	/**
	 * Possibilita a alteracao do nome do evento
	 * @param nome Novo nome do evento
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}
	/**
	 * Recupera a data do evento
	 * @return A data do evento
	 */
	public String getData() {
		return data;
	}
	/**
	 * Altera a data do evento
	 * @param data Nova data do evento
	 */
	public void setData(String data) {
		this.data = data;
	}
	/**
	 * Recupera o horario do evento
	 * @return retorna o horario do evento
	 */
	public String getHorario() {
		return horario;
	}
	/**
	 * Altera o horario do evento
	 * @param horario Novo horario do evento
	 */
	public void setHorario(String horario) {
		this.horario = horario;
	}
	/**
	 * Recupera a duracao do evento
	 * @return Retorna a duracao do evento
	 */
	public String getDuracao() {
		return duracao;
	}
	/**
	 * Altera a duracao do evento
	 * @param duracao Novo tempo de duracao do evento
	 */
	public void setDuracao(String duracao) {
		this.duracao = duracao;
	}
	/**
	 * Recupera a descricao do evento
	 * @return A descricao do evento
	 */
	public String getDescricao() {
		return descricao;
	}
	/**
	 * Altera a descricao do evento
	 */
	public void setDescricao() {
		this.descricao =STRING_VAZIA;
		this.sc = new Scanner(System.in);
		descricao+=sc.nextLine();
	}
	/**
	 * Recupera a anotacao 
	 * @return Retorna a anotacao
	 */
	public String getAnotacao() {
		return anotacao;
	}
	public void setAnotacao() {
		this.anotacao =STRING_VAZIA;
		this.sc = new Scanner(System.in);
		anotacao+=sc.nextLine();
	}
	/**
	 * Recupera o tipo do evento
	 * @return Retorna  o tipo do vento
	 */
	public String getTipo() {	
		return tipo;
	}
	/**
	 * Altera o tipo do evento
	 * @param tipo Novo nome do tipo do evento
	 */
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	/**
	 * Recupera a lista de contatos relacionados ao evento
	 * @return Retorna a lista de usuarios relacionados ao evento
	 */
	public List<Contato> getUsuariosCadastrados() {
		return usuariosCadastrados;
	}
	
	

}
